import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
import fetch from 'node-fetch';

// 获取当前文件路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 数据存储目录及文件
const DATA_DIR = path.resolve(__dirname, '../data/MonitorStatus');
const KEY_FILE = path.join(DATA_DIR, 'monitor_keys.json');

// 确保数据目录存在
if (!fs.existsSync(DATA_DIR)) {
  fs.mkdirSync(DATA_DIR);
}
if (!fs.existsSync(KEY_FILE)) {
  fs.writeFileSync(KEY_FILE, '{}');
}

class MonitorStatusPlugin extends plugin {
  constructor() {
    super({
      name: 'monitor_status',
      dsc: '绑定皮皮key并查询状态',
      event: 'message',
      priority: 500,
      rule: [
        { reg: "^#绑定皮皮key (.+)$", fnc: 'bindKey', permission: 'all' },
        { reg: "^#查看我的窗口$", fnc: 'checkStatus', permission: 'all' },
      ],
    });
  }

  // 绑定Key
  bindKey(e) {
    const inputKey = e.msg.replace(/^#绑定皮皮key\s*/, '').trim();

    // 验证key格式（假设key为字母数字的组合）
    const validFormat = /^[a-zA-Z0-9-]+$/;
    if (!validFormat.test(inputKey)) {
      return e.reply('请输入有效的Key。', true, { recallMsg: 10 });
    }

    const keys = this.loadMonitorKeys();
    keys[e.user_id] = inputKey;  // 使用QQ号作为键
    this.saveMonitorKeys(keys);

    e.reply(`已成功绑定Key：${inputKey}`);
  }

  // 查询状态
  async checkStatus(e) {
    const keys = this.loadMonitorKeys();
    const key = keys[e.user_id];

    if (!key) {
      return e.reply('未绑定Key，请使用 #绑定皮皮key <key> 进行绑定。', true, { recallMsg: 10 });
    }

    const apiUrl = `https://zz.napneko.me/?key=${key}`;
    await e.reply(`正在查询状态，请稍后...`, true, { recallMsg: 10 });

    try {
      const response = await fetch(apiUrl, { timeout: 10000 });
      if (!response.ok) {
        throw new Error(`API 状态码：${response.status}`);
      }

      const data = await response.json();
      console.log(data); // 打印完整数据以便检查

      const imageUrl = data.last_image;
      const uploadTime = data.upload_time;

      if (!imageUrl || !uploadTime) {
        return e.reply('未能获取有效的状态信息。', true, { recallMsg: 10 });
      }

      // 发送状态信息和图片
      await e.reply([`状态信息：\n上传时间：${uploadTime}`, segment.image(imageUrl)], true);
    } catch (error) {
      console.error('查询状态时发生错误:', error);
      e.reply(`查询状态失败：${error.message}`, true, { recallMsg: 10 });
    }
  }

  // 加载已保存的Keys
  loadMonitorKeys() {
    try {
      const data = fs.readFileSync(KEY_FILE, 'utf-8');
      return JSON.parse(data);
    } catch (error) {
      console.error('加载Key数据失败:', error);
      return {};
    }
  }

  // 保存Keys，确保JSON格式化输出（分行）
  saveMonitorKeys(keys) {
    try {
      // 格式化输出，并保证每个人的数据分行显示
      const formattedData = JSON.stringify(keys, null, 2);
      fs.writeFileSync(KEY_FILE, formattedData);
    } catch (error) {
      console.error('保存Key数据失败:', error);
    }
  }
}

export default MonitorStatusPlugin;
